⚠️ Pokud nemáte stažený Git repozitář z minulé lekce “L11: Bash skripty – echo, proměnné”, stáhněte si ho. Návod je hned na začátku.
existuje.sh)V adresáři ~/bash/ máte cvičný soubor existuje.sh s následujícím skriptem:
#!/bin/bash
echo "Zapiš název souboru:"
read nazev
if test -f $nazev
then
echo "Soubor existuje."
else
echo "Soubor neexistuje!"
fi
Podmínka test -f vrací 1 (TRUE), je-li $nazev soubor.
Častěji se příkaz test nahrazuje hranatými závorkami. Ty musí být z obou stran odsazené mezerou (je to příkaz):
if [ -f $nazev ]
💾 Opravte v předchozím skriptu a vyzkoušejte.
Parametry příkazu test nebo „závorkové“ konstrukce [ -f $nazev ]:
[ -e soubor ] soubor existuje
[ -f soubor ] je to soubor
[ -d soubor ] je to adresář
[ -s soubor ] velikost souboru není 0
[ -r soubor ] soubor jde číst
[ -w soubor ] do souboru jde zapisovat
[ -x soubor ] soubor je spustitelný
[ souborA -nt souborB ] první soubor je novější
[ souborA -no souborB ] první soubor je starší
Nejsou to všechny parametry. Další „tradičně“ na man test.
ucet.shNapište skript ~/bash/ucet.sh, který ze vstupu načte zadané uživatelské jméno. Následně jej porovná s názvem vašeho uživatelského jména a vypíše zprávu, zda je nebo není shodné.
Jméno přihlášeného uživatele vypíše příkaz whoami:
$ whoami
karel
Všechny proměnné v shellu jsou jednoho datového typu. Nemá ani typovou konverzi. To vysvětluje, proč se řetězce a čísla porovnávají níže popsaným způsobem. výraz, výraz1 i výraz2 vrací řetězec. Teprve když ho chceme porovnávat jako číslo, tak ho shell bere jako číslo.
Pokud je výraz TRUE vrací 1, jinak vrací 0 (FALSE).
[ výraz ] délka řetězce je nenulová
[ -z výraz ] délka řetězce je nulová
[ výraz1 = výraz2 ] řetězce jsou shodné
[ výraz1 != výraz2 ] řetězce jsou různé
[ výraz1 -eq výraz2 ] čísla jsou shodná (equals)
[ výraz1 -ne výraz2 ] čísla jsou různá (not equal)
[ výraz1 -le výraz2 ] výraz1 <= výraz2 (lees or equal)
[ výraz1 -lt výraz2 ] výraz1 < výraz2 (less than)
[ výraz1 -ge výraz2 ] výraz1 >= výraz2 (greater or equal)
[ výraz1 -gt výraz2 ] výraz1 > výraz2 (greater than)
cislo.sh)V adresáři ~/bash/ máte cvičný soubor cislo.sh s následujícím skriptem:
#!/bin/bash
echo -n "Zadej celé číslo: "
read a
if [ $a -gt 100 ]
then
echo "$a je větší než 100"
elif [ $a -lt 100 ]
then
echo "$a je menší než 100"
else
echo "$a je rovno 100"
fi
exitexit n
Příkaz okamžité ukončí skript s daným návratovým kódem:
exit 0 … úspěšné ukončeníexit n … ukončení s chybou (n je 1 – 125, nejčastěji 1)Ostatní n jsou rezervovány.
cislo2.sh ($?)Vytvořte kopii skriptu cislo.sh s názvem cislo2.sh: Doplňte do něj návratové kódy takto:
0 … pokud je číslo 1001 … pokud je menší než 1002 … pokud je větší než 1003 … pokud je zápornéNávratové kódy ověřte v terminálu příkazem:
$ echo $?
Proměnná $? obsahuje návratový status (kód) vykonaného programu. Návratové kódy neslouží ani tak uživateli, ale především systému nebo jinému skriptu.
Více podmínek se spojuje operátory && (AND) nebo || (OR).
Bash má odlišnou syntaxi:
if [ -r $nazev ] && [ -w $nazev ]
if [[ (podm_1 && podm_2) || (podm_3 && podm_4) ]]